# -*- coding: utf-8 -*- 
# @project : 《Atcoder》
# @Author : created by bensonrachel on 2021/7/3
# @File : D - Logical Expression.py

#DP动态规划题

N = int(input())  # dp问题，动态规划
char = []
char.append(0)
cnt = 0
for _ in range(N):
    S = input()
    char.append(S)
dp = [None] * (N + 1)
dp[0] = 1  # 初始值为1，因为这是N=0的情况，虽然题目规定N大于0。
for i in range(1, N + 1):
    if (char[i] == "OR"):
        T = 2 ** i  # 代表这Xi选True时的情况的方法数，所以前面的结果随便怎么样都行。
        F = dp[i - 1]  # 代表这Xi选False时的情况的方法数，所有前面那堆的结果一定要为True。所以直接等于前面的方法数即可。
        dp[i] = T + F
    else:
        dp[i] = dp[i - 1]
print(dp[N])


#1，当为AND，前面的结果和当前Xi的值都要为TRUE，所以直接等于前面的方法数
#2，当为OR，Xi有两种选择，选True时，前面的结果随便怎么样都行。选False时，所有前面那堆的结果一定要为True。所以直接等于前面的方法数即可。直接等于2^i+dp[i-1]


"""
N = int(input())#dp问题，动态规划
char = []
char.append(0)
cnt = 0
for _ in range(N):
    S = input()
    char.append(S)
dp = 1#初始值为1，因为这是N=0的情况，虽然N大于0
for i in range(1,N+1):
    if(char[i]=="OR"):
        T = 2**i #代表这Xi选True时的情况的方法数，所以前面的结果随便怎么样都行。
        F = dp#代表这Xi选False时的情况的方法数，所有前面那堆的结果一定要为True。所以直接等于前面的方法数即可。
        dp = T+F
print(dp)


原地，减少空间复杂度  
    

"""
